package backend

import (
	"time"
)

// WitsData WITS-A协议数据结构
type WitsData struct {
	// ==== 基础信息 ====
	Timestamp  time.Time `json:"timestamp" db:"timestamp"`     // 时间戳
	WellID     string    `json:"well_id" db:"well_id"`         // 井号
	RigID      string    `json:"rig_id" db:"rig_id"`           // 钻机编号
	RecordType int       `json:"record_type" db:"record_type"` // 记录类型 (01-99)

	// ==== 钻井深度信息 ====
	HoleDepth     float64 `json:"hole_depth" db:"hole_depth"`         // 井深 (m)
	BitDepth      float64 `json:"bit_depth" db:"bit_depth"`           // 钻头深度 (m)
	MeasuredDepth float64 `json:"measured_depth" db:"measured_depth"` // 测量深度 (m)

	// ==== 钻井参数 ====
	ROP    float64 `json:"rop" db:"rop"`       // 机械钻速 (m/hr)
	WOB    float64 `json:"wob" db:"wob"`       // 钻压 (kN)
	RPM    float64 `json:"rpm" db:"rpm"`       // 转盘转速 (rpm)
	Torque float64 `json:"torque" db:"torque"` // 转盘扭矩 (kN·m)

	// ==== 提升系统 ====
	HookLoad     float64 `json:"hook_load" db:"hook_load"`         // 大钩负荷 (kN)
	HookPosition float64 `json:"hook_position" db:"hook_position"` // 大钩位置 (m)
	HookVelocity float64 `json:"hook_velocity" db:"hook_velocity"` // 大钩速度 (m/min)
	BlockHeight  float64 `json:"block_height" db:"block_height"`   // 游车高度 (m)

	// ==== 循环系统 ====
	StandpipePressure float64 `json:"standpipe_pressure" db:"standpipe_pressure"` // 立管压力 (MPa)
	CasingPressure    float64 `json:"casing_pressure" db:"casing_pressure"`       // 套管压力 (MPa)
	Pump1Pressure     float64 `json:"pump1_pressure" db:"pump1_pressure"`         // 1#泵压 (MPa)
	Pump2Pressure     float64 `json:"pump2_pressure" db:"pump2_pressure"`         // 2#泵压 (MPa)
	Pump3Pressure     float64 `json:"pump3_pressure" db:"pump3_pressure"`         // 3#泵压 (MPa)

	Pump1SPM float64 `json:"pump1_spm" db:"pump1_spm"` // 1#泵冲数 (spm)
	Pump2SPM float64 `json:"pump2_spm" db:"pump2_spm"` // 2#泵冲数 (spm)
	Pump3SPM float64 `json:"pump3_spm" db:"pump3_spm"` // 3#泵冲数 (spm)
	TotalSPM float64 `json:"total_spm" db:"total_spm"` // 总冲数 (spm)

	FlowRateIn      float64 `json:"flow_rate_in" db:"flow_rate_in"`           // 入口流量 (L/s)
	FlowRateOut     float64 `json:"flow_rate_out" db:"flow_rate_out"`         // 出口流量 (L/s)
	FlowRatePercent float64 `json:"flow_rate_percent" db:"flow_rate_percent"` // 流量百分比 (%)

	// ==== 钻井液参数 ====
	MudWeightIn     float64 `json:"mud_weight_in" db:"mud_weight_in"`       // 入口泥浆密度 (g/cm³)
	MudWeightOut    float64 `json:"mud_weight_out" db:"mud_weight_out"`     // 出口泥浆密度 (g/cm³)
	MudTempIn       float64 `json:"mud_temp_in" db:"mud_temp_in"`           // 入口泥浆温度 (°C)
	MudTempOut      float64 `json:"mud_temp_out" db:"mud_temp_out"`         // 出口泥浆温度 (°C)
	MudConductivity float64 `json:"mud_conductivity" db:"mud_conductivity"` // 泥浆电导率 (S/m)
	MudVolume       float64 `json:"mud_volume" db:"mud_volume"`             // 泥浆罐总体积 (m³)

	// ==== 固控设备 ====
	Shaker1  bool `json:"shaker1" db:"shaker1"`   // 1#振动筛状态
	Shaker2  bool `json:"shaker2" db:"shaker2"`   // 2#振动筛状态
	Shaker3  bool `json:"shaker3" db:"shaker3"`   // 3#振动筛状态
	Desander bool `json:"desander" db:"desander"` // 除砂器状态
	Desilter bool `json:"desilter" db:"desilter"` // 除泥器状态

	// ==== 气体检测 ====
	TotalGas float64 `json:"total_gas" db:"total_gas"` // 总烃 (%)
	Methane  float64 `json:"methane" db:"methane"`     // 甲烷 (%)
	Ethane   float64 `json:"ethane" db:"ethane"`       // 乙烷 (%)
	Propane  float64 `json:"propane" db:"propane"`     // 丙烷 (%)
	Butane   float64 `json:"butane" db:"butane"`       // 丁烷 (%)
	Pentane  float64 `json:"pentane" db:"pentane"`     // 戊烷 (%)
	H2S      float64 `json:"h2s" db:"h2s"`             // 硫化氢 (ppm)
	CO2      float64 `json:"co2" db:"co2"`             // 二氧化碳 (%)

	// ==== 地质参数 ====
	Caliper        float64 `json:"caliper" db:"caliper"`                 // 井径 (mm)
	TVD            float64 `json:"tvd" db:"tvd"`                         // 垂直深度 (m)
	Inclination    float64 `json:"inclination" db:"inclination"`         // 井斜角 (°)
	Azimuth        float64 `json:"azimuth" db:"azimuth"`                 // 方位角 (°)
	DoglegSeverity float64 `json:"dogleg_severity" db:"dogleg_severity"` // 狗腿严重度 (°/30m)

	// ==== 设备状态 ====
	DrawworksStatus int `json:"drawworks_status" db:"drawworks_status"` // 绞车状态 (0:停止, 1:上提, 2:下放)
	RotaryStatus    int `json:"rotary_status" db:"rotary_status"`       // 转盘状态 (0:停止, 1:运行)
	PumpsStatus     int `json:"pumps_status" db:"pumps_status"`         // 泵状态位图

	// ==== 报警信息 ====
	AlarmCode    int    `json:"alarm_code" db:"alarm_code"`       // 报警代码
	AlarmLevel   int    `json:"alarm_level" db:"alarm_level"`     // 报警级别 (1:信息, 2:警告, 3:严重)
	AlarmMessage string `json:"alarm_message" db:"alarm_message"` // 报警消息

	// ==== 扩展字段 ====
	CustomData  map[string]interface{} `json:"custom_data,omitempty" db:"-"`   // 自定义数据
	DataQuality int                    `json:"data_quality" db:"data_quality"` // 数据质量 (0-100)
	DataSource  string                 `json:"data_source" db:"data_source"`   // 数据源
}

// WITS记录类型常量
const (
	WITS_GENERAL_DATA   = 1  // 通用数据
	WITS_DRILLING_DATA  = 2  // 钻井数据
	WITS_MUD_DATA       = 3  // 泥浆数据
	WITS_GAS_DATA       = 4  // 气体数据
	WITS_SURVEY_DATA    = 5  // 测斜数据
	WITS_GEOLOGY_DATA   = 6  // 地质数据
	WITS_ALARM_DATA     = 7  // 报警数据
	WITS_BIT_DATA       = 8  // 钻头数据
	WITS_PIPE_DATA      = 9  // 管柱数据
	WITS_EQUIPMENT_DATA = 10 // 设备数据
)

// 设备状态位图
const (
	PUMP1_RUNNING = 1 << iota
	PUMP2_RUNNING
	PUMP3_RUNNING
	ROTARY_RUNNING
	DRAWWORKS_UP
	DRAWWORKS_DOWN
)

// 报警级别
const (
	ALARM_INFO     = 1
	ALARM_WARNING  = 2
	ALARM_CRITICAL = 3
)
